package com.wmx.colone;

/**
 * @author wmx
 * @version 1.0
 * @date 2019/8/13 17:20
 * @description:
 */

import java.io.*;

/**
 * 1.不关闭文件会浪费系统资源，与数据库连接资源类似。程序每执行一段代码都占用一部分内存，如果不关闭的话肯定会浪费内存的，而且如果有动态分配的内存，那还会造成内存泄露。

 2.每个系统打开文件数量是有一限制的，如果打开文件不关闭，当连接数满的时候就无法再打开文件了。一般一个操作系统能最多打开1024个文件，但这个不一定，与机器硬件配置和系统配置有关。老点的机器只能同时打开256个或更低。

 3.IO流也有独占模式，也就是锁的概念，打开一个文件流以后，如果是以读的模式打开那就是共享锁,其它程序也可访问读取;如果以写的模式打开一般为独占，其它程序不能访问.具体表现情况还要看操作系统或者应用程序是如何处理的,因为底层的程序和高层的程序不一样。
 */
public class StudentTest {
    public static void main(String[] args) throws Exception{



        Student friend = new Student();
        friend.setAge(33);
        friend.setName("刘丽");
        Student student1 = new Student();
        student1.setAge(2);
        student1.setName("张三");
        student1.setFriend(friend);

        System.out.println(student1);
        Student student2 = (Student) student1.clone();
        System.out.println("浅度克隆出的对象："+student2);
        System.out.println(student1.getFriend() == student2.getFriend());

        // 深度克隆
        Student student3 =  (Student) student1.deepClone();

        System.out.println("深度克隆出的对象："+student3);

        System.out.println(student3.getFriend() == student1.getFriend());


         do{
             System.out.println("请求输入:");
             InputStream inputStream = System.in;
             BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
             String str=bufferedReader.readLine();
             System.out.println("你输入的是："+str);
             if(str.equals("A")){
                 break;
             }

         }while (true);

        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArrayOutputStream);
        objectOutputStream.writeObject(friend);
        System.out.println(byteArrayOutputStream.toByteArray().length);
        byte [] a = byteArrayOutputStream.toByteArray();

        ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(a);
        ObjectInputStream objectInputStream = new ObjectInputStream(byteArrayInputStream);
        Student s = (Student)objectInputStream.readObject();
        System.out.println(s == friend);


    }
}
